草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

c++ - std::basic_string 的使用

basic_string类显然被设计为通用容器,因为除了c_str()函数外,我在其规范中找不到任何特定于文本的函数。出于好奇,除了存储人类可读的字符数据之外,您是否曾将std::basic_string容器类用于其他用途?我问这个问题的原因是,人们常常不得不在通用或具体之间做出选择。设计者选择将std::basic_string类设为通用类,但我怀疑它是否曾经以这种方式使用过。 最佳答案 它被设计为一个字符串类(因此,例如length()和所有那些查找函数),但是在将STL引入标准库之后,它也被装备为一个STL容器(因此size(

c++ - 如何获取给定 HWND 的工具提示文本?

我正在寻找一种方法来获取与给定HWND关联的工具提示控件(如果有)。工具提示控件的文本也足够了。我找到的最接近的是TTM_GETTEXT消息,但它意味着要发送到工具提示控件本身,而不是与其关联的工具。虽然我没有工具提示控件的句柄。有人知道怎么做吗?所有这些都是使用C++中的普通WindowsAPI完成的。 最佳答案 似乎没有从控件获取提示或其文本的特定消息,但这是MFC的CWnd类实现OnToolHitTest()的方式,您应该能够适应Win32:INT_PTRSomeFunction(HWNDhWndChild,TOOLINFO*

c++ - 阅读堆栈/堆和符号表概念的好资源是什么?

请推荐一些非常详细地处理这些主题的网站或书籍。我需要更好地理解这些概念(引用C++):堆栈和堆符号表实现范围规则函数调用的实现 最佳答案 您可以阅读DragonBook,但我想这可能太多了。 关于c++-阅读堆栈/堆和符号表概念的好资源是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2064553/

c++ - 使用 std::streams 格式化输出

我有一个我希望能够流式传输的对象。但是我希望能够通过使用不同的格式以不同的方式流式传输它,或者我应该说描述这个对象的方法。我想知道这应该如何用流来解决。我想要的是能够使用通用格式并使用某种格式适配器将通用格式转换为首选格式。我还希望能够将格式与Item的实现分开,这样我就不必在每次添加或更改新格式时都更改Item。这段代码大致说明了我想要什么。Itemitem;std::cout但这可能是不可能的或不切实际的。面对这样的问题,流媒体库打算如何使用? 最佳答案 我个人会写一套格式化程序。格式化程序必须知道他们正在格式化的对象的内部结构

c++ - 为什么这些 shared_ptr 不指向同一个容器?

我有一个类模型:classModel{...boost::shared_ptr_deck;boost::shared_ptr_stack[22];};Deck继承自CardStack。我试图让_stack[0]指向与_deck指向相同的东西:{_deck=boost::shared_ptr(newDeck());_stack[0]=_deck;}似乎对_stack[0]的_deck的赋值导致生成了_deck的拷贝。(我知道这一点是因为对_stack[0]的修改不会导致对_deck的修改。)如何让它们指向同一事物?好的-没有调用复制构造函数。我已经通过实现它并查看它是否被调用来验证这一点

c++ - 如何避免在 C/C++ API 中对字符串进行编码混淆?

我正致力于在C和C++中实现不同的API,并且想知道有哪些技术可用于避免客户端在从框架接收字符串或将它们传回时出现编码错误。例如,想象一个简单的C++插件API,客户可以实现它来影响翻译。它可能具有这样的功能:constchar*getTranslatedWord(constchar*englishWord);现在,假设我想强制所有字符串都以UTF-8格式传递。当然我会记录这个要求,但我希望编译器强制执行正确的编码,也许通过使用专用类型。例如,像这样:classWord{public:staticWordfromUtf8(constchar*data){returnWord(data)

c++ - std::tr1::function 是否有合理的默认值?

我花了一些时间在谷歌上搜索,但没有真正找到任何东西。我希望能够做到这一点:std::tr1::functionfoo(SOME_DEFAULT_FUNCTION_THAT_DOES_NOTHING);////Somecodethatcouldpossiblyassignfoo//foo();否则我必须这样做:std::tr1::functionfoo;////Somecodethatcouldpossiblyassignfoo//if(foo){foo();}我意识到我可以创建一个什么都不做的函数,但我正在寻找一些标准的方法来不必处理检查函数是否被赋予空对象模式的值。

c++ - 在序列化方面需要一些帮助

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我正在尝试编写一个程序,在不使用任何库的情况下将链表序列化为文件。我的问题是如何在序列化结构中添加或删除节点,因为我没有下一个指针?另外,我怎样才能避免碎片化?

c++ - 何时使用 DBL_EPSILON/epsilon

DBL_EPSILON/std::numeric_limits::epsilon会给我最小的值,当加一时会有所不同。我无法理解如何将这些知识应用到有用的东西中。epsilon比计算机可以处理的最小值大得多,因此使用比epsilon更小的值是安全的假设似乎是正确的?我正在处理的值之间的比率是否应该小于1/epsilon? 最佳答案 DBL_EPSILON的定义不是那样的。它是1和1之后的下一个可表示数字之间的差值(您的定义假定舍入模式设置为“向0”或“向负无穷大”,这并不总是正确的)。如果您对数值分析有足够的了解,这将很有用。但我担心

c++ - 单个 VirtualAlloc 分配使用的内存(和其他资源)

单个VirtualAlloc(xxxx,yyy,MEM_RESERVE,zzz)使用了多少内存或其他资源?当我分配一个大块时,资源消耗(例如内核分页/非分页池)是否有任何差异,如下所示:VirtualAlloc(xxxx,1024*1024,MEM_RESERVE,PAGE_READWRITE)或多个较小的block,像这样:VirtualAlloc(xxxx,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(xxxx+1*64*1024,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(x